package BasicPractice

//模式匹配及匹配表达式练习
object patternMatchPractice {
  def main(args: Array[String]): Unit = {
    //模式匹配允许我们在多个条件之间进行编程选择。
    def printNum(int: Int) {
      int match {
        case 0 => println("Zero")
        case 1 => println("One")
        case _ => println("more than one")
      }
    }
    printNum(0)
    printNum(1)
    printNum(2)
    //带下划线_的最后一种情况是通配符。它匹配任何未定义在上面的情况下。
    /*匹配任何类型
    让我们考虑一个任何类型的元素的列表，包含一个String，一个Double，一个Int和一个Char。*/
    val anyList= List(1, "A", 2, 2.5, 'a')
    for (m <- anyList) {
      m match {
        case i: Int => println("Integer: " + i)
        case s: String => println("String: " + s)
        case f: Double => println("Double: " + f)
        case other => println("other: " + other)
      }
    }

    /*测试数据类型
    下面的方法测试一个传入的Object，看看它是一个String，一个Integer，或者别的东西。*/
    def test2(in: Any) = in match {
      case s: String => "String, length "+s.length
      case i: Int if i > 0 => "Natural Int"
      case i: Int => "Another Int"
      case a: AnyRef => a.getClass.getName
      case _ => "null"
    }

    /*Scala匹配表达式
    Scala的匹配表达式用于模式匹配。
    我们可以使用它在很少的代码中构造复杂的测试。
    模式匹配就像Java的switch语句，但我们可以测试几乎任何东西，我们可以将匹配的值分配给变量。
    Scala模式匹配是一个表达式，因此它产生可以分配或返回的值。
    最基本的模式匹配就像Java的switch，除了在每种情况下没有中断，因为这些情况不会相互影响。*/
    44 match {
      case 44 => true// if we match 44,the result is true
      case _ => false// otherwise the result isfalse
    }
    //如何匹配字符串。
    "CSS" match {
      case "CSS"=> 45 // the result is 45 if we match "CSS"
      case "Elwood" => 77
      case _ => 0
    }


  }
}
